<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        // 实现继承的方式5：借用构造函数实现继承
        // 原理：函数的 call、apply调用方式
        function Animal(name, age, gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;
        }

        function Person(name, age, gender, say) {
            // this.name = name;
            // this.age = age;
            // this.gender = gender;

            // 这段代码是错误的调用
            // Animal 中的this指向问题，this指向window而不是Person的实例
            // Animal(name, age, gender);

            // 正确调用方式
            // 指定 Animal 内部的this指向Person的实例
            // Animal.call(this, name, age, gender);

            // 以上代码等价于
            Animal.apply(this, [name, age, gender]);

            this.say = say;
        }

        var p1 = new Person("宋小宝", "男", 18, function(){
            console.log("不差钱");
        });

        console.log(p1);
    </script>
</body>
</html>